//
//  OAuthViewController.swift
//  TWeibo
//
//  Created by wtw on 15/7/30.
//  Copyright © 2015年 wtw. All rights reserved.
//

 /// 授权界面的控制器

import UIKit
import SVProgressHUD

class OAuthViewController: UIViewController,UIWebViewDelegate {

    /// 懒加载一个WebView
    private lazy var webView = UIWebView()

    //设置导航栏里的关闭按钮和标题
    override func loadView() {
        view = webView
        
        //通过代理来监听webView的行为
        webView.delegate = self
        
        title = "新浪微博"
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "关闭", style: UIBarButtonItemStyle.Plain, target: self, action: "close")
    }
    
    /// 关闭界面
    func close() {
        SVProgressHUD.dismiss()
        dismissViewControllerAnimated(true, completion: nil)
        
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
         /// 加载授权页面
        webView.loadRequest(NSURLRequest(URL: NetworkTools .shareNetworkTools.oauthUrl()))
    }
    
    //MARK - WebView的代理方法
    func webViewDidStartLoad(webView: UIWebView) {
        //print("开始")
        SVProgressHUD.show()
    }
    func webViewDidFinishLoad(webView:UIWebView) {
        //print("结束")
        SVProgressHUD.dismiss()
    }
    
       /*
    1.如果请求的 URL 包含 回调地址，需要判断参数，否则继续加载
    2.如果请求参数中，包含 code ，可以从请求的url中获取到请求码
    */
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
        //print(request)
        /// 判断请求的 Url 中是否包含回调地址
        let urlString = request.URL!.absoluteString
        //是否包含回调地址,如果包含需要判断，如果不包含继续加载
        if !urlString.hasPrefix(NetworkTools.shareNetworkTools.redirectUri) {
        return true
        }
        //print(urlString)  返回带code的字符串
        //query有值就是code的值
        print(request.URL?.query)
        //判断query中是否有code
        if let query = request.URL?.query where query.hasPrefix("code=") {
            print("获取授权码")
            //从query 中截取授权码
            let code = query.substringFromIndex(advance(query.startIndex, "code=".characters.count))
            print("授权成功 \(code)")
            
        // code获取成功后换取 TOKEN
            loadAccessToken(code)
            
        }else {
            close()
        }
        
        return false
    }
    /// 加载TOKEN
    private func loadAccessToken(code: String) {
        NetworkTools.shareNetworkTools.loadAccessToken(code) { (result, error) -> () in
            if error != nil || result == nil {
                
                self.loadError()
                return
             }
            //字典转模型
            //用token获得的信息创建用户账户模型
            //异步加载用户账户信息
            //保存用户信息(模型中完成)
            UserAcount(dict: result!).loadUserInfo ({ (error) -> () in
                if error != nil {
                
                    self.loadError()
                    return
                }
                
                // 发送通知切换视图控制器
                NSNotificationCenter.defaultCenter().postNotificationName(TWRootViewControllerSwitchNotification, object: false)
                
                //关闭控制器 Modal 出来的控制器，一定注意要dismiss
               self.close()
            })
        }
    }
        //网络出错处理
        private func loadError() {
    
        SVProgressHUD.showInfoWithStatus("网络不给力")
        
        //延时一段时间关闭  时间间隔  NSEC_PER_SEC：纳秒每秒
        let when = dispatch_time(DISPATCH_TIME_NOW, Int64(1 * NSEC_PER_SEC))
        dispatch_after(when, dispatch_get_main_queue()) {
            self.close()
        }
    }
    
}

